package com.up360.rapidcalc.aerolite.util
{

    /**
     * @author Tunie
     * @date   Apr 28, 2013
     * 集合
     */
    public class Collection
    {
        protected var _length:uint;
        protected var _elements:Array;
        
        public function Collection()
        {
            _length=0;
            _elements=new Array();
        }
        
        /**
         *根据索引取得对应的项
         * @param index
         * @return 
         */
        public function get(index:int):Object
        {
            checkRange(index);
            return _elements[index];
        }
        /**
         *往集合中添加项
         * @param obj
         * 
         */
        public function add(obj:Object):void
        {
            _elements.push(obj);
            _length++;
        }
        /**
         *删除指定项 
         * @param obj
         * 
         */
        public function remove(obj:Object):void
        {
            if(!contain(obj)) return;
            var b_index:int=_elements.indexOf(obj);
            _elements.splice(b_index,1);
            _length--;
        }
        /**
         *清空集合 
         * 
         */
        public function clear():void
        {
            for(var i:int=0;i<_length;i++)
            {
                _elements[i]=null;
            }
            _elements.splice(0,_length);
            _length=0;
        }
        /**
         *判断指定项是否在集合中。 
         * @param obj
         * @return 
         * 
         */
        public function contain(obj:Object):Boolean
        {
            if(_elements.indexOf(obj)<0)
                return false;
            return true;
        }
        
        /**
         *返回集合项长度。 
         * @return 
         * 
         */
        public function size():uint
        {
            return _length;
        }
        
        /**
         * 返回集合是否为空。
         * @return 
         * 
         */
        public function isEmpty():Boolean
        {
            return _length<1;
        }
        
        public function display():void
        {
            for each(var obj:Object in _elements)
                trace(obj);
        }
        /**
         *检测传入的参数是否在集合的范围 
         * @param index
         * 
         */
        private function checkRange(index:int):void
        {
            if(index>=_length) throw new Error("out of array bounds!");
            if(index<0) throw new Error("不合法的参数,参数不能小于0");
        }
    }
}